'use strict';
const { generateRandomNumber } = require('../utils/randomUUID');
// 酒店预约信息表
module.exports = app => {
  const { STRING, INTEGER, DATE, TEXT } = app.Sequelize;

  const Reservation = app.model.define('reservation', {
    id: { type: INTEGER, primaryKey: true, autoIncrement: true },
    name: { type: STRING(30), allowNull: false }, // 客户姓名
    phone: { type: STRING(20), allowNull: false }, // 客户电话
    room_title: { type: STRING(20), allowNull: false }, // 房间标题
    checkin_date: { type: DATE }, // 入住日期
    checkout_date: { type: DATE }, // 退房日期
    room_id: { type: INTEGER, allowNull: false, unique: true }, // 房间号
    created_at: { type: DATE, defaultValue: new Date() }, // 订单创建时间
    updated_at: { type: DATE, defaultValue: new Date() },
    status: { type: INTEGER, allowNull: false, defaultValue: 0, comment: '0未入住，1已入住' }, // 房间当前状态
    orderID: { type: STRING(30), allowNull: false, defaultValue: 0 }, // 订单编号 自动生成
    orderState: { type: INTEGER, allowNull: false, defaultValue: 0, comment: '0为未付款，1待付款 2已付款 3 已取消订单' }, // 订单状态
    total_price: { type: INTEGER, allowNull: false }, // 总价格
    hotel_title: { type: STRING(30) }, // 酒店名称
    hotel_address: { type: STRING(30) }, // 酒店地址
    room_pic: { type: STRING(30) }, // 房间图片
    room_type: { type: STRING(30) }, // 房间类型
    textarea: { type: TEXT }, // 客户备注
    hotel_id: { type: INTEGER, allowNull: false }, // 酒店id

  });

  Reservation.associate = function() {
    app.model.Reservation.belongsTo(app.model.HotelRoom, { foreignKey: 'room_id', targetKey: 'room_id' });
  };
  Reservation.associate = function() {
    app.model.Reservation.belongsTo(app.model.User, { foreignKey: 'user_id', targetKey: 'id' });
  };
  // 钩子函数，在创建之前随机插入一个订单编号
  Reservation.beforeCreate(reservation => {
    reservation.orderID = generateRandomNumber(); // 这里的 generateRandomNumber() 函数需要自己实现
  });
  return Reservation;
};
